home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / compiler.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  5.6 KB  |  202 lines

  1. #ifndef __LINUX_COMPILER_H
  2. #define __LINUX_COMPILER_H
  3.  
  4. #ifndef __ASSEMBLY__
  5.  
  6. #ifdef __CHECKER__
  7. # define __user        __attribute__((noderef, address_space(1)))
  8. # define __kernel    /* default address space */
  9. # define __safe        __attribute__((safe))
  10. # define __force    __attribute__((force))
  11. # define __nocast    __attribute__((nocast))
  12. # define __iomem    __attribute__((noderef, address_space(2)))
  13. # define __acquires(x)    __attribute__((context(x,0,1)))
  14. # define __releases(x)    __attribute__((context(x,1,0)))
  15. # define __acquire(x)    __context__(x,1)
  16. # define __release(x)    __context__(x,-1)
  17. # define __cond_lock(x,c)    ((c) ? ({ __acquire(x); 1; }) : 0)
  18. extern void __chk_user_ptr(const volatile void __user *);
  19. extern void __chk_io_ptr(const volatile void __iomem *);
  20. #else
  21. # define __user
  22. # define __kernel
  23. # define __safe
  24. # define __force
  25. # define __nocast
  26. # define __iomem
  27. # define __chk_user_ptr(x) (void)0
  28. # define __chk_io_ptr(x) (void)0
  29. # define __builtin_warning(x, y...) (1)
  30. # define __acquires(x)
  31. # define __releases(x)
  32. # define __acquire(x) (void)0
  33. # define __release(x) (void)0
  34. # define __cond_lock(x,c) (c)
  35. #endif
  36.  
  37. #ifdef __KERNEL__
  38.  
  39. #if __GNUC__ >= 4
  40. # include <linux/compiler-gcc4.h>
  41. #elif __GNUC__ == 3 && __GNUC_MINOR__ >= 2
  42. # include <linux/compiler-gcc3.h>
  43. #else
  44. # error Sorry, your compiler is too old/not recognized.
  45. #endif
  46.  
  47. #define notrace __attribute__((no_instrument_function))
  48.  
  49. /* Intel compiler defines __GNUC__. So we will overwrite implementations
  50.  * coming from above header files here
  51.  */
  52. #ifdef __INTEL_COMPILER
  53. # include <linux/compiler-intel.h>
  54. #endif
  55.  
  56. /*
  57.  * Generic compiler-dependent macros required for kernel
  58.  * build go below this comment. Actual compiler/compiler version
  59.  * specific implementations come from the above header files
  60.  */
  61.  
  62. #define likely(x)    __builtin_expect(!!(x), 1)
  63. #define unlikely(x)    __builtin_expect(!!(x), 0)
  64.  
  65. /* Optimization barrier */
  66. #ifndef barrier
  67. # define barrier() __memory_barrier()
  68. #endif
  69.  
  70. #ifndef RELOC_HIDE
  71. # define RELOC_HIDE(ptr, off)                    \
  72.   ({ unsigned long __ptr;                    \
  73.      __ptr = (unsigned long) (ptr);                \
  74.     (typeof(ptr)) (__ptr + (off)); })
  75. #endif
  76.  
  77. #endif /* __KERNEL__ */
  78.  
  79. #endif /* __ASSEMBLY__ */
  80.  
  81. #ifdef __KERNEL__
  82. /*
  83.  * Allow us to mark functions as 'deprecated' and have gcc emit a nice
  84.  * warning for each use, in hopes of speeding the functions removal.
  85.  * Usage is:
  86.  *         int __deprecated foo(void)
  87.  */
  88. #ifndef __deprecated
  89. # define __deprecated        /* unimplemented */
  90. #endif
  91.  
  92. #ifdef MODULE
  93. #define __deprecated_for_modules __deprecated
  94. #else
  95. #define __deprecated_for_modules
  96. #endif
  97.  
  98. #ifndef __must_check
  99. #define __must_check
  100. #endif
  101.  
  102. #ifndef CONFIG_ENABLE_MUST_CHECK
  103. #undef __must_check
  104. #define __must_check
  105. #endif
  106. #ifndef CONFIG_ENABLE_WARN_DEPRECATED
  107. #undef __deprecated
  108. #undef __deprecated_for_modules
  109. #define __deprecated
  110. #define __deprecated_for_modules
  111. #endif
  112.  
  113. /*
  114.  * Allow us to avoid 'defined but not used' warnings on functions and data,
  115.  * as well as force them to be emitted to the assembly file.
  116.  *
  117.  * As of gcc 3.4, static functions that are not marked with attribute((used))
  118.  * may be elided from the assembly file.  As of gcc 3.4, static data not so
  119.  * marked will not be elided, but this may change in a future gcc version.
  120.  *
  121.  * NOTE: Because distributions shipped with a backported unit-at-a-time
  122.  * compiler in gcc 3.3, we must define __used to be __attribute__((used))
  123.  * for gcc >=3.3 instead of 3.4.
  124.  *
  125.  * In prior versions of gcc, such functions and data would be emitted, but
  126.  * would be warned about except with attribute((unused)).
  127.  *
  128.  * Mark functions that are referenced only in inline assembly as __used so
  129.  * the code is emitted even though it appears to be unreferenced.
  130.  */
  131. #ifndef __used
  132. # define __used            /* unimplemented */
  133. #endif
  134.  
  135. #ifndef __maybe_unused
  136. # define __maybe_unused        /* unimplemented */
  137. #endif
  138.  
  139. #ifndef noinline
  140. #define noinline
  141. #endif
  142.  
  143. /*
  144.  * Rather then using noinline to prevent stack consumption, use
  145.  * noinline_for_stack instead.  For documentaiton reasons.
  146.  */
  147. #define noinline_for_stack noinline
  148.  
  149. #ifndef __always_inline
  150. #define __always_inline inline
  151. #endif
  152.  
  153. #endif /* __KERNEL__ */
  154.  
  155. /*
  156.  * From the GCC manual:
  157.  *
  158.  * Many functions do not examine any values except their arguments,
  159.  * and have no effects except the return value.  Basically this is
  160.  * just slightly more strict class than the `pure' attribute above,
  161.  * since function is not allowed to read global memory.
  162.  *
  163.  * Note that a function that has pointer arguments and examines the
  164.  * data pointed to must _not_ be declared `const'.  Likewise, a
  165.  * function that calls a non-`const' function usually must not be
  166.  * `const'.  It does not make sense for a `const' function to return
  167.  * `void'.
  168.  */
  169. #ifndef __attribute_const__
  170. # define __attribute_const__    /* unimplemented */
  171. #endif
  172.  
  173. /*
  174.  * Tell gcc if a function is cold. The compiler will assume any path
  175.  * directly leading to the call is unlikely.
  176.  */
  177.  
  178. #ifndef __cold
  179. #define __cold
  180. #endif
  181.  
  182. /* Simple shorthand for a section definition */
  183. #ifndef __section
  184. # define __section(S) __attribute__ ((__section__(#S)))
  185. #endif
  186.  
  187. /*
  188.  * Prevent the compiler from merging or refetching accesses.  The compiler
  189.  * is also forbidden from reordering successive instances of ACCESS_ONCE(),
  190.  * but only when the compiler is aware of some particular ordering.  One way
  191.  * to make the compiler aware of ordering is to put the two invocations of
  192.  * ACCESS_ONCE() in different C statements.
  193.  *
  194.  * This macro does absolutely -nothing- to prevent the CPU from reordering,
  195.  * merging, or refetching absolutely anything at any time.  Its main intended
  196.  * use is to mediate communication between process-level code and irq/NMI
  197.  * handlers, all running on the same CPU.
  198.  */
  199. #define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
  200.  
  201. #endif /* __LINUX_COMPILER_H */
  202.